// pages/music/index.js
const ac =  wx.getBackgroundAudioManager() //用于播放所有歌曲的对象

let lastIndex //最后点击歌曲的索引号
Page({
	pause(e){ //点击暂停
		console.log(this.data.paused?'播放play':'暂停pause')
		let paused=!this.data.paused
		if(paused)ac.pause()
		else ac.play()
		this.setData({paused})
	},
	play(e) { //播放点击的歌曲
		let index=e.currentTarget.dataset.index //点击歌曲的索引号
		// (1)方法简单容易理解，但是效率比较低
		// let songs=this.data.songs //获取原来的页面数据
		// if(lastIndex!=null)songs[lastIndex].selected=false //点击的歌曲增加selected属性
		// songs[index].selected=true //点击的歌曲增加selected属性
		// lastIndex=index //调整最后点击歌曲的索引号
		// this.setData({songs}) //重新更新页面数据
		// (2)仅仅更新有修改的数组元素
		let change={paused:false} //记录有变化的数据
		if(lastIndex!=null){
			if(index==lastIndex)return //点击的上次点击的歌曲，直接返回
			change[`songs[${lastIndex}].selected`]=false //点击的歌曲增加selected属性
		}
		change[`songs[${index}].selected`]=true //点击的歌曲增加selected属性, 也可以直接写到change对象里
		lastIndex=index //调整最后点击歌曲的索引号
		this.setData(change) //重新更新页面数据
		let id=this.data.songs[index].id //点击歌曲的ID号
		let mp3 = `https://music.163.com/song/media/outer/url?id=${id}.mp3`
		console.log('playing...',mp3)
        ac.src = mp3 //设置要播放的歌曲地址
        ac.title=this.data.songs[index].name
        // ac.startTime=180//跳过3分钟，仅仅用于调试
		ac.play() //实现歌曲的播放
	},
	formatDuration(ms) { //把毫秒转换为分秒的形式，比如："3:09"
		ms = parseInt(ms / 1000) //秒
		let minute = parseInt(ms / 60) //分钟
		ms %= 60 // 秒
		return minute + ":" + (ms < 10 ? '0' : '') + ms // "3:09", 不要"3:9"
    },
    onUnload(){ //卸载页面时执行
        let songMessage=this.data //当前的页面数据
        songMessage.lastIndex=lastIndex //保存原来最后播放的歌曲
        delete songMessage.__webviewId__ //删除不需要缓存的数据
        delete songMessage.inputKey
        wx.setStorageSync('songMessage', songMessage) //缓存数据到手机
    },
    onLoad(options) { //生命周期函数--监听页面加载
        let songMessage=wx.getStorageSync('songMessage') //获取缓存的数据
        console.log(songMessage, typeof songMessage) //若键对应的值不存在，则返回空字符串
        if(songMessage){
            lastIndex=songMessage.lastIndex //恢复原来最后播放歌曲的索引号
            delete songMessage.lastIndex
            this.setData(songMessage) //将缓存还原为页面数据
        }
        ac.onEnded(()=>{ //监听歌曲播放结束
            let index=lastIndex+1 //获取下一首歌曲的索引号
            if(index==this.data.songs.length)index=0 //全部歌曲播放完毕，从第一首继续播放
            this.play({currentTarget:{dataset:{index}}}) //e.currentTarget.dataset.index
        })
		// this.search({detail:{value:'蒋大为'}}) //默认查询蒋大为的歌曲
    },
    search(e){ //执行搜索
        let search=e.detail.value.trim() //要搜索的内容
        if(!search)return //搜索内容为空直接返回
        this.setData({search, inputKey:'', songs:[]})
        this.request(search) 
	},
	onReachBottom(){ //触底时的回调函数
		console.log('onReachBottom~')
		// console.log(JSON.stringify(this.data.songs[9]))
		// let change={}
		// change[`songs[10]`]={ //新增数组元素
		// 	"id":1990105530,
		// 	"name":"美丽的草原我的家22",
		// 	"duration":"13:53",
		// 	"album":"蒋大为独唱歌曲选22"
		// }
		// this.setData(change)
		this.request(this.data.search)
	},
    request(key){ //请求歌曲数据并渲染到界面上
		let offset=this.data.songs.length //原来歌曲的数量
		if(offset>=this.data.songCount)return //没有更多数据，无需发起请求
        wx.request({
			url: `https://music.163.com/api/search/get/?s=${key}&limit=20&type=1&offset=${offset}`,
			complete: r => { //不管成功或失败都会执行
				console.log(r) // (1) r.data.result  (2) r.errMsg=="request:ok"
				if (r.errMsg == "request:ok" && r.data.result.songs) {
					// let songs = [] //存储处理之后的歌曲信息
					let change={songCount: r.data.result.songCount} //记录有变化的数据
					r.data.result.songs.forEach(item => { //遍历数组中的每一个元素，当前元素的名字就是item
						change[`songs[${offset++}]`]={
							id: item.id, //歌曲的id
							name: item.name, //名字
							duration: this.formatDuration(item.duration), //时长从毫秒转换为分秒的形式
							album: item.album.name, //专辑的名称
						}
					})
					this.setData(change)
					// this.setData({
					// 	songs, songCount: r.data.result.songCount
					// }) //设置页面数据
				}
			}
		})
    }
})